package com.zmn.plat.persistence.interfaces.category;

import com.zmn.common.dto.StatusDTO;
import com.zmn.plat.model.entity.category.BaseCategoryAttribute;
import com.zmn.plat.model.entity.category.BaseCategoryAttributeQuery;
import com.zmn.plat.model.vo.category.BaseCategoryAttrVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * BaseCategoryAttributeDAO继承基类
 *
 * @author tanghongjun
 * @since 18/10/15 11:09
 */
public interface AttributeDAO {

    /**
     * 描述: BaseCategoryAttributeVO key 查询数据
     *
     * @param: attrId
     * @return: BaseCategoryAttributeVO
     */
    BaseCategoryAttribute findByKey(Integer attrId);
    /**
     * 子类属性集合
     *
     * @param categId  分类名称
     * @param attrName 属性名
     * @return
     */
    List<BaseCategoryAttribute> listAttributeFromChildByCategIdAndAttrName(@Param("categId")Integer categId,@Param("channelId")Integer channelId, @Param("attrName")String attrName);

    /**
     * 统计分类属性集合
     *
     * @param categId  分类名称
     * @param attrName 属性名
     * @return
     */
    List<BaseCategoryAttribute> listAttributeByCategIdAndAttrName(@Param("categId")Integer categId,@Param("channelId")Integer channelId,  @Param("attrName")String attrName);
    /**
     * 统计子类属性个数
     *
     * @param categId  分类名称
     * @param attrName 属性名
     * @return
     */
    int countAttributeFromChild(@Param("categId") Integer categId, @Param("attrName") String attrName);

    /**
     * 统计分类属性个数
     *
     * @param categId  分类名称
     * @param attrName 属性名
     * @return
     */
    int countAttribute(@Param("categId") Integer categId, @Param("attrName") String attrName);

    /**
     * 描述:查询最大key
     *
     * @return: attrId
     */
    Integer findKeyForMax();


    /**
     * 描述: 根据查询条件分页查询
     *
     * @param: BaseCategoryAttributeQuery
     * @return: List<BaseCategoryAttributeVO>
     */
    List<BaseCategoryAttrVO> listPageByQuery(BaseCategoryAttributeQuery query);

    /**
     * 描述: 根据查询条件查询所有数据
     *
     * @param: BaseCategoryAttributeQuery
     * @return: List<BaseCategoryAttributeVO>
     */
    List<BaseCategoryAttribute> listByQuery(BaseCategoryAttributeQuery query);

    /**
     * 查询所有
     *
     * @return
     */
    List<BaseCategoryAttribute> listAll();

    /**
     * 描述: 根据查询条件统计满足条件的数据条数
     *
     * @param: BaseCategoryAttributeQuery
     * @return: Integer
     */
    Integer countByQuery(BaseCategoryAttributeQuery query);

    /**
     * 描述: 根据主键修改数据
     *
     * @param: BaseCategoryAttributeVO
     * @return: 执行结果码
     */
    Integer updateByKey(BaseCategoryAttribute baseCategoryAttribute);

    /**
     * 批量修改状态
     *
     * @param dto 条件
     * @return
     */
    int updateStatusBatch(StatusDTO dto);

    /**
     * 修改排序
     *
     * @param attribute 属性ID
     * @return
     */
    int updateSortKey(BaseCategoryAttribute attribute);

    /**
     * 描述: 新增数据
     *
     * @param: BaseCategoryAttributeVO
     * @return: 执行结果码
     */
    Integer insert(BaseCategoryAttribute baseCategoryAttribute);

    /**
     * 描述: 根据主键删除数据
     *
     * @param: attrId
     * @return: 执行结果码
     */
    Integer deleteByKey(Integer attrId);

    /**
     * 根据产品分类ID查询所有属性
     *
     * @param categoryId 分类ID
     * @param channelId  渠道ID
     * @param attrType   属性类型
     * @return
     */
    List<BaseCategoryAttribute> listByCategoryId(@Param("categoryId") Integer categoryId, @Param("attrType") Integer attrType, @Param("channelId") Integer channelId);
}